import 'package:flutter/material.dart';
import 'package:bloc/bloc.dart';



abstract class BasePage<PageState extends BasePageState>
    extends StatefulWidget {
  List params;

  BasePage({key, this.params}) : super(key: key);

  @override
  PageState createState() {
    return iniPageState();
  }

  PageState iniPageState();
}

abstract class BasePageState extends State<BasePage> {
  //上一个页面传递过来的参数；
  List params;





  // bloc 列表；
  List<Bloc> blocs = [];

  @override
  void initState() {
    super.initState();
    try {
      params = widget.params;
    } catch (e) {
      params = null;
    }

    iniBloc(blocs);
    pageIniState();
  }

  @override
  void dispose() {
    super.dispose();
    params = null;
    //释放bloc。
    if (blocs != null && blocs.length > 0) {
      blocs.forEach((bloc) => bloc.dispose());
    }
    pageDispose();
  }

  @override
  Widget build(BuildContext context) {
    return iniBody(context);
  }

  // iniState()初始化。
  void pageIniState() {}

  // disPonse();
  void pageDispose() {}



  void showLoading() {
    Scaffold.of(context).showSnackBar(SnackBar(content: Text('Loading....')));
  }

  void hideLoading() {
    Scaffold.of(context).hideCurrentSnackBar();
  }


  /// abstract方法
  //初始化bloc；  blocs : page的bloc列表；
  iniBloc(List<Bloc> blocs);
  // 初始化body;
  Widget iniBody(BuildContext context);




}
